package br.com.werp.regras.pessoa.controle;

import br.com.werp.regras.geral.Auditoria;
import br.com.werp.regras.geral.FabricaSubSistema;
import br.com.werp.regras.geral.util.BeanUtil;
import br.com.werp.regras.geral.vos.pessoa.PessoaBancoVO;
import br.com.werp.regras.geral.vos.tabelas.Banco;
import br.com.werp.regras.pessoa.integracao.BancoDAO;
import br.com.werp.regras.pessoa.integracao.FabricaDAO;

import java.util.List;


/**
 * @author Sobreira
 * Criado em 04/08/2006
 */
public class ControleBanco {
    public void persistirBanco(PessoaBancoVO pessoaBancoVO, String usuario)
        throws Exception {
        ControlePessoaJuridica controlePessoaJuridica = new ControlePessoaJuridica();

        BancoDAO bancoDAO = FabricaDAO.getBancoDAO();
        Object key = bancoDAO.iniciarTransacao();
        int pessID = pessoaBancoVO.getPess_id();
        Banco banco = new Banco();
        BeanUtil.copiarVO(pessoaBancoVO, banco);

        try {
            if (pessID == 0) {
                pessID = controlePessoaJuridica.inserirPessoaJuridica(pessoaBancoVO,
                        key, usuario);
                banco.setBanc_pessoa(pessID);
                bancoDAO.inserirBanco(banco, key);
                FabricaSubSistema.getAuditoria().auditarRecurso(key, usuario,
                    banco, Auditoria.INCLUIR);
            } else {
                controlePessoaJuridica.atualizaPessoaJuridica(pessoaBancoVO,
                    key, usuario);

                banco.setBanc_pessoa(pessID);
                bancoDAO.atualizarBanco(key, banco);

                FabricaSubSistema.getAuditoria().auditarRecurso(key, usuario,
                    banco, Auditoria.ALTERAR);
            }

            bancoDAO.concluirTransacao(key);
        } catch (Exception e) {
            bancoDAO.abortarTransacao(key);
            throw e;
        }
    }

    public List pesquisarBanco(PessoaBancoVO pessoaBancoVO)
        throws Exception {
        return FabricaDAO.getBancoDAO().obterBancos(pessoaBancoVO);
    }
}
